<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
      <title>Class DemoDrawing | HiAPI-C# 2025 </title>
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <meta name="title" content="Class DemoDrawing | HiAPI-C# 2025 ">
      
      <meta name="description" content="Demonstrates various drawing techniques using the HiAPI graphics system. Provides examples of primitive drawing, attribute specification, and rendering options. Includes methods for drawing lines, points, triangles, and other geometric primitives.">
      <link rel="icon" href="../../img/HiAPI.favicon.ico">
      <link rel="stylesheet" href="../../public/docfx.min.css">
      <link rel="stylesheet" href="../../public/main.css">
      <meta name="docfx:navrel" content="../../toc.html">
      <meta name="docfx:tocrel" content="toc.html">
      
      <meta name="docfx:rel" content="../../">
      
      
      
      <meta name="loc:inThisArticle" content="In this article">
      <meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
      <meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
      <meta name="loc:tocFilter" content="Filter by title">
      <meta name="loc:nextArticle" content="Next">
      <meta name="loc:prevArticle" content="Previous">
      <meta name="loc:themeLight" content="Light">
      <meta name="loc:themeDark" content="Dark">
      <meta name="loc:themeAuto" content="Auto">
      <meta name="loc:changeTheme" content="Change theme">
      <meta name="loc:copy" content="Copy">
      <meta name="loc:downloadPdf" content="Download PDF">

      <script type="module" src="./../../public/docfx.min.js"></script>

      <script>
        const theme = localStorage.getItem('theme') || 'auto'
        document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
      </script>

  </head>

  <body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
    <header class="bg-body border-bottom">
      <nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
        <div class="container-xxl flex-nowrap">
          <a class="navbar-brand" href="../../index.html">
            <img id="logo" class="svg" src="../../img/HiAPI.logo.png" alt="">
            
          </a>
          <button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
            <i class="bi bi-three-dots"></i>
          </button>
          <div class="collapse navbar-collapse" id="navpanel">
            <div id="navbar">
              <form class="search" role="search" id="search">
                <i class="bi bi-search"></i>
                <input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
              </form>
            </div>
          </div>
        </div>
      </nav>
    </header>

    <main class="container-xxl">
      <div class="toc-offcanvas">
        <div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
          <div class="offcanvas-header">
            <h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
            <button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
          </div>
          <div class="offcanvas-body">
            <nav class="toc" id="toc"></nav>
          </div>
        </div>
      </div>

      <div class="content">
        <div class="actionbar">
          <button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
            <i class="bi bi-list"></i>
          </button>

          <nav id="breadcrumb"></nav>
        </div>

        <article data-uid="Sample.Disp.DemoDrawing">



  <h1 id="Sample_Disp_DemoDrawing" data-uid="Sample.Disp.DemoDrawing" class="text-break">
Class DemoDrawing  
  </h1>

  <div class="facts text-secondary">
    <dl><dt>Namespace</dt><dd><a class="xref" href="Sample.html">Sample</a>.<a class="xref" href="Sample.Disp.html">Disp</a></dd></dl>
  <dl><dt>Assembly</dt><dd>Hi.Sample.Wpf.dll</dd></dl>
  </div>

  <div class="markdown summary"><p>Demonstrates various drawing techniques using the HiAPI graphics system.
Provides examples of primitive drawing, attribute specification, and rendering options.
Includes methods for drawing lines, points, triangles, and other geometric primitives.</p>
</div>
  <div class="markdown conceptual"></div>

  <div class="codewrapper">
    <pre><code class="lang-csharp hljs">public static class DemoDrawing</code></pre>
  </div>




  <dl class="typelist inheritance">
    <dt>Inheritance</dt>
    <dd>
      <div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a></div>
      <div><span class="xref">DemoDrawing</span></div>
    </dd>
  </dl>



  <dl class="typelist inheritedMembers">
    <dt>Inherited Members</dt>
    <dd>
    <div>
      <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object)">object.Equals(object)</a>
    </div>
    <div>
      <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object-system-object)">object.Equals(object, object)</a>
    </div>
    <div>
      <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gethashcode">object.GetHashCode()</a>
    </div>
    <div>
      <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gettype">object.GetType()</a>
    </div>
    <div>
      <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.memberwiseclone">object.MemberwiseClone()</a>
    </div>
    <div>
      <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.referenceequals">object.ReferenceEquals(object, object)</a>
    </div>
    <div>
      <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.tostring">object.ToString()</a>
    </div>
  </dd></dl>




  <h2 id="Sample_Disp_DemoDrawing_remarks">Remarks</h2>
  <div class="markdown level0 remarks"><h3 id="source-code">Source Code</h3>
<pre><code class="lang-csharp" name="SampleCode">using Hi.Geom;
using Hi.Disp;
using System.Collections.Generic;
using Hi.Disp.Treat;
using Hi.Coloring;

namespace Sample.Disp
{
    /// &lt;summary&gt;
    /// Demonstrates various drawing techniques using the HiAPI graphics system.
    /// Provides examples of primitive drawing, attribute specification, and rendering options.
    /// Includes methods for drawing lines, points, triangles, and other geometric primitives.
    /// &lt;/summary&gt;
    /// &lt;remarks&gt;
    /// ### Source Code
    /// [!code-csharp[SampleCode](~/../Hi.Sample.Wpf/Disp/DemoDrawing.cs)]
    /// &lt;/remarks&gt;
    public static class DemoDrawing
    {
        /// &lt;summary&gt;
        /// Demonstrates simple line drawing using raw vertex coordinates.
        /// Creates a basic line strip from three vertices and displays it using DemoUtil.
        /// &lt;/summary&gt;
        public static void FreeDrawing()
        {
            #region DocSite.FreeDrawing
            double[] vs =
                {0,0,0
                ,1,0,0
                ,0,0,1};
            DemoUtil.RunApplication(&quot;EasyDraw&quot;
                , new Drawing(vs, Stamp.V, GL.GL_LINE_STRIP));
            #endregion
        }

        /// &lt;summary&gt;
        /// Demonstrates various types of line drawing techniques.
        /// Shows how to create points, line strips, line strips with normals, and colored line strips.
        /// Illustrates different ways to specify vertex attributes like position, color, and normal.
        /// &lt;/summary&gt;
        public static void DrawLines()
        {
            List&lt;Vec3d&gt; ps;
            double[] vs;
            int n = 10; //vertex num

            ////create drawPoints
            ps = new List&lt;Vec3d&gt;(n);
            for (int i = 0; i &lt; n; i++)
                ps.Add(new Vec3d(i, 0, 0));
            vs = new double[ps.Count * 3];
            for (int i = 0; i &lt; ps.Count; i++)
            {
                vs[3 * i] = ps[i].x;
                vs[3 * i + 1] = ps[i].y;
                vs[3 * i + 2] = ps[i].z;
            }

            //V means Vertex
            Drawing drawPoints = new Drawing(vs, Stamp.V, GL.GL_POINTS);

            ////create drawLineStrip
            vs = new double[ps.Count * 3];
            for (int i = 0; i &lt; ps.Count; i++)
            {
                vs[3 * i] = i;
                vs[3 * i + 1] = 0;
                vs[3 * i + 2] = 1;
            }
            Drawing drawLineStrip = new Drawing(vs, Stamp.V, GL.GL_LINE_STRIP);

            ////create drawLineStripWithNormal
            //the content of vs is Nx,Ny,Nz,Vx,Vy,Vz, Nx,Ny,Nz,Vx,Vy,Vz, ...
            vs = new double[n * 6];
            for (int i = 0; i &lt; n; i++)
            {
                //nx,ny,nz
                vs[6 * i] = 1;
                vs[6 * i + 1] = 0;
                vs[6 * i + 2] = 0;
                //x,y,z
                vs[6 * i + 3] = i;
                vs[6 * i + 4] = 0;
                vs[6 * i + 5] = 2;
            }
            //V means Vertex; N means Normal
            Drawing drawLineStripWithNormal =
                new Drawing(vs, Stamp.NV, GL.GL_LINE_STRIP);

            ////create drawColorLines
            vs = new double[n * 6];
            for (int i = 0; i &lt; n; i++)
            {
                //the rgb values set casually.
                //r,g,b
                vs[6 * i] = i % 3 / 2D;
                vs[6 * i + 1] = i % 5 / 4D;
                vs[6 * i + 2] = i % 7 / 6D;
                //x,y,z
                vs[6 * i + 3] = i;
                vs[6 * i + 4] = 0;
                vs[6 * i + 5] = 3;
            }
            //V means Vertex; C means Color
            Drawing drawLineStripWithColor = new Drawing(vs, Stamp.CV, GL.GL_LINE_STRIP);

            DemoUtil.RunApplication(&quot;DrawLines&quot;,
                new DispList(drawPoints, drawLineStrip
                , drawLineStripWithNormal, drawLineStripWithColor));
        }

        /// &lt;summary&gt;
        /// Demonstrates drawing triangles using OpenGL primitives.
        /// Shows how to create colored triangles (CV) and colored triangles with normals (CNV).
        /// Illustrates packing of vertex attributes (color, normal, position) into arrays for rendering.
        /// &lt;/summary&gt;
        public static void DrawTrianglesByPrimitives()
        {
            int n = 10;// triangle num
            double[] vs;

            ////create drawTrisCV
            //each triangle has 3 point; each point has r,g,b,x,y,z, totally 6 doubles.
            vs = new double[n * 3 * 6];
            for (int i = 0, k = 0; i &lt; n; i++)
            {
                //the rgb values set as casual.
                Vec3d rgb = ColorUtil.GetDiscreteRgb(i);
                Tri3d tri = new Tri3d(new Vec3d(i, 0, 0), new Vec3d(i + 1, 0, 0), new Vec3d(i + 0.5, 0, 1));
                for (int j = 0; j &lt; 3; j++)
                {
                    vs[k++] = rgb.x;
                    vs[k++] = rgb.y;
                    vs[k++] = rgb.z;
                    vs[k++] = tri.ps[j].x;
                    vs[k++] = tri.ps[j].y;
                    vs[k++] = tri.ps[j].z;
                }
            }
            //V means Vertex; C means Color
            Drawing drawTrisCV = new Drawing(vs, Stamp.CV, GL.GL_TRIANGLES);

            ////create drawTrisCNV
            /////each triangle has 3 point; each point has r,g,b,nx,ny,nz,x,y,z, totally 6 doubles.
            vs = new double[n * 3 * 9];
            for (int i = 0, k = 0; i &lt; n; i++)
            {
                //the rgb values set as casual.
                Vec3d rgb = ColorUtil.GetDiscreteRgb(i);
                Tri3d tri = new Tri3d(new Vec3d(i, 0, 3), new Vec3d(i + 1, 0, 3), new Vec3d(i + 0.5, 0, 4));
                Vec3d nn = tri.GetNormal();
                for (int j = 0; j &lt; 3; j++)
                {
                    vs[k++] = rgb.x;
                    vs[k++] = rgb.y;
                    vs[k++] = rgb.z;
                    vs[k++] = nn.x;
                    vs[k++] = nn.y;
                    vs[k++] = nn.z;
                    vs[k++] = tri.ps[j].x;
                    vs[k++] = tri.ps[j].y;
                    vs[k++] = tri.ps[j].z;
                }
            }
            //V means Vertex; C means Color; N means Normal
            Drawing drawTrisCNV = new Drawing(vs, Stamp.CNV, GL.GL_TRIANGLES);

            //the color of colorTrisDraw is not influence by outer color setting.
            DemoUtil.RunApplication(&quot;DrawTrianglesByPrimitives&quot;,
                new DispList(new RgbTreat(1, 0, 0), drawTrisCV, drawTrisCNV));
        }

        /// &lt;summary&gt;
        /// Demonstrates drawing 3D triangles using the Tri3d helper class.
        /// Creates a series of triangles and renders them as both face (filled) and line (wireframe) drawings.
        /// Shows how to apply different colors to faces and lines of the same geometry.
        /// &lt;/summary&gt;
        public static void DrawTri3d()
        {
            int n = 10;
            List&lt;Tri3d&gt; tris = new List&lt;Tri3d&gt;(n);
            for (int i = 0; i &lt; n; i++)
                tris.Add(new Tri3d(new Vec3d(i, 0, 0), new Vec3d(i + 1, 0, 0), new Vec3d(i + 0.5, 0, 1)));

            Drawing faceDraw = tris.GetFaceDrawing();
            Drawing linesDraw = tris.GetLineDrawing();

            DemoUtil.RunApplication(&quot;DrawTri3d&quot;,
                new DispList(new RgbTreat(0, 0, 1), linesDraw
                , new RgbTreat(1, 0, 0), faceDraw));
        }

        static void Main()
        {
            //FreeDrawing();
            //DrawLines();
            //DrawTrianglesByPrimitives();
            DrawTri3d();
        }
    }
}
</code></pre></div>


  <h2 class="section" id="methods">Methods
</h2>


  <a id="Sample_Disp_DemoDrawing_DrawLines_" data-uid="Sample.Disp.DemoDrawing.DrawLines*"></a>

  <h3 id="Sample_Disp_DemoDrawing_DrawLines" data-uid="Sample.Disp.DemoDrawing.DrawLines">
  DrawLines()
  
  </h3>

  <div class="markdown level1 summary"><p>Demonstrates various types of line drawing techniques.
Shows how to create points, line strips, line strips with normals, and colored line strips.
Illustrates different ways to specify vertex attributes like position, color, and normal.</p>
</div>
  <div class="markdown level1 conceptual"></div>

  <div class="codewrapper">
    <pre><code class="lang-csharp hljs">public static void DrawLines()</code></pre>
  </div>













  <a id="Sample_Disp_DemoDrawing_DrawTri3d_" data-uid="Sample.Disp.DemoDrawing.DrawTri3d*"></a>

  <h3 id="Sample_Disp_DemoDrawing_DrawTri3d" data-uid="Sample.Disp.DemoDrawing.DrawTri3d">
  DrawTri3d()
  
  </h3>

  <div class="markdown level1 summary"><p>Demonstrates drawing 3D triangles using the Tri3d helper class.
Creates a series of triangles and renders them as both face (filled) and line (wireframe) drawings.
Shows how to apply different colors to faces and lines of the same geometry.</p>
</div>
  <div class="markdown level1 conceptual"></div>

  <div class="codewrapper">
    <pre><code class="lang-csharp hljs">public static void DrawTri3d()</code></pre>
  </div>













  <a id="Sample_Disp_DemoDrawing_DrawTrianglesByPrimitives_" data-uid="Sample.Disp.DemoDrawing.DrawTrianglesByPrimitives*"></a>

  <h3 id="Sample_Disp_DemoDrawing_DrawTrianglesByPrimitives" data-uid="Sample.Disp.DemoDrawing.DrawTrianglesByPrimitives">
  DrawTrianglesByPrimitives()
  
  </h3>

  <div class="markdown level1 summary"><p>Demonstrates drawing triangles using OpenGL primitives.
Shows how to create colored triangles (CV) and colored triangles with normals (CNV).
Illustrates packing of vertex attributes (color, normal, position) into arrays for rendering.</p>
</div>
  <div class="markdown level1 conceptual"></div>

  <div class="codewrapper">
    <pre><code class="lang-csharp hljs">public static void DrawTrianglesByPrimitives()</code></pre>
  </div>













  <a id="Sample_Disp_DemoDrawing_FreeDrawing_" data-uid="Sample.Disp.DemoDrawing.FreeDrawing*"></a>

  <h3 id="Sample_Disp_DemoDrawing_FreeDrawing" data-uid="Sample.Disp.DemoDrawing.FreeDrawing">
  FreeDrawing()
  
  </h3>

  <div class="markdown level1 summary"><p>Demonstrates simple line drawing using raw vertex coordinates.
Creates a basic line strip from three vertices and displays it using DemoUtil.</p>
</div>
  <div class="markdown level1 conceptual"></div>

  <div class="codewrapper">
    <pre><code class="lang-csharp hljs">public static void FreeDrawing()</code></pre>
  </div>














</article>

        <div class="contribution d-print-none">
        </div>


      </div>

      <div class="affix">
        <nav id="affix"></nav>
      </div>
    </main>

    <div class="container-xxl search-results" id="search-results"></div>

    <footer class="border-top text-secondary">
      <div class="container-xxl">
        <div class="flex-fill">
          <span> Copyright © 2025 <a href='https://superhightech.com.tw'>Tech Coordinate</a>. All rights reserved. <a href='https://superhightech.com.tw'>超級高科技股份有限公司</a> © 2025 版權所有 </span>
        </div>
      </div>
    </footer>
  </body>
</html>
